// 移棋子游戏
// 给定一个有 N 个节点的有向无环图，图中某些节点上有棋子，两名玩家交替移动棋子。
// 玩家每一步可将任意一颗棋子沿一条有向边移动到另一个点，无法移动者输掉游戏。
// 对于给定的图和棋子初始位置，双方都会采取最优的行动，询问先手必胜还是先手必败。
// 如果两人都采用最优策略，问先手是否必胜。
// 测试链接 ：https://loj.ac/p/10243
// 相关帖子 ：https://www.cnblogs.com/dx123/p/17277281.html
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 2001;
const int MAXM = 6001;
// 链式前向星
int head[MAXN];
int next[MAXM];
int to[MAXM];
int cnt = 1;
// 记录每个节点的 sg 值
int f[MAXN];
int n, m, k;
int u, v, x;

inline int read()
{
    char ch = getchar();
    int x = 0, f = 1;
    while(ch < '0' || ch > '9')
    {
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
    {
        x = 10 * x + ch - '0';
        ch = getchar();
    }
    return f * x;
}

void addEdge(int u, int v)
{
    ::next[cnt] = head[u];
    to[cnt] = v;
    head[u] = cnt++;
}

int sg(int u)
{
    // 记忆化搜索
    if(f[u] != -1) return f[u];
    // 把子节点的 sg 值插入集合
    unordered_set<int> s;
    for(int ei = head[u]; ei; ei = ::next[ei])
    {
        s.insert(sg(to[ei]));
    }
    // mex 运算求当前节点的 sg 值并记忆
    for(int i = 0; ; ++i)
    {
        if(!s.count(i)) return f[u] = i;
    }
}

int main()
{
    n = read(), m = read(), k = read();
    for(int i = 0; i < m; ++i)
    {
        u = read(), v = read();
        addEdge(u, v);
    }
    memset(f, -1, sizeof f);
    int eor = 0;
    for(int i = 0; i < k; ++i)
    {
        x = read();
        eor ^= sg(x);
    }
    if(eor != 0) puts("win");
    else puts("lose");

    return 0;
}